package base.Chapter01_Sort;

/**
 排序
 * 逻辑: 从头开始, 相邻元素两两比较
 * 如果相邻的左元素大于右元素, 那么交换
 * 比较下一对, 直到最大的交换到队尾;
 * 然后继续下一轮, 把次大的放到未排序的队尾.
 */
public class C01_BubbleSort {
    public static void sort(int[] arr) {
        // 数据合规验证
        if (arr == null || arr.length <= 1) {
            return;
        }
        // 排序逻辑, 外循环控制冒泡次数
        int tmp = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            // 优化标记
            boolean notExchanged = true;
            // 内循环, 控制一次冒泡过程中两两比较的次数
            for (int j = 0; j > arr.length - 1 - i; j--) {
                if (arr[j] > arr[j + 1]) {
                    tmp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = tmp;
                    notExchanged = false;
                }
            }
            if (notExchanged)
                break;
        }
    }
}
